#ifndef IIC_H
#define IIC_H

#ifdef __cplusplus
extern "C" {
#endif

#include "public.h"
#include "gpio_pin.h"

/* IIC结构体，支持多实例 */
typedef struct
{
    uint32_t scl_pin;   // SCL引脚（用GET_PIN宏编码）
    uint32_t sda_pin;   // SDA引脚
    uint8_t  delay_us;  // 时序延迟，单位us
} soft_iic_t;

/* 初始化IIC结构体 */
void iic_init(soft_iic_t *iic, uint32_t scl_pin, uint32_t sda_pin, uint8_t delay_us);

/* 产生IIC起始信号 */
void iic_start(soft_iic_t *iic);

/* 产生IIC停止信号 */
void iic_stop(soft_iic_t *iic);

/* 发送一个字节 */
void iic_send_byte(soft_iic_t *iic, uint8_t byte);

/* 读取一个字节 */
uint8_t iic_read_byte(soft_iic_t *iic, uint8_t ack);

/* 等待应答，返回1=无应答，0=有应答 */
uint8_t iic_wait_ack(soft_iic_t *iic);

/* 产生ACK应答 */
void iic_ack(soft_iic_t *iic);

/* 产生NACK应答 */
void iic_nack(soft_iic_t *iic);

/* 写寄存器（常用） */
uint8_t iic_write_reg(soft_iic_t *iic, uint8_t dev_addr, uint8_t reg, uint8_t data);

/* 读寄存器（常用） */
uint8_t iic_read_reg(soft_iic_t *iic, uint8_t dev_addr, uint8_t reg, uint8_t *data);

#ifdef __cplusplus
}
#endif

#endif // IIC_H